package dp;

import java.util.Scanner;

//有多少种不同的方法可以使得从小明手里开始传的花，传了m次以后，又回到小明手里。对于传递的方法当且仅当这两种方法中，
	//接到花的同学按接球顺序组成的序列是不同的，才视作两种传花的方法不同。
	//比如有3个同学1号、2号、3号，并假设小明为1号，花传了3次回到小明手里的方式有1->2->3->1和1->3->2->1，共2种。
public class DeliverFlower {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		int studentCount, deliverOunt;
		while(scanner.hasNext()){
			studentCount = scanner.nextInt();
			deliverOunt = scanner.nextInt();
			getDeliverCounts(studentCount, deliverOunt);
		}
		scanner.close();
	}
	
	//f(i,m)表示从i号同学传递m次到给定同学编号j 可能的次数
	public static int getDeliverCounts(int n , int deliverCount){
	    final int J = 0;
		int[][] count = new int[n][deliverCount + 1];
		for (int m = 0; m < count[0].length; m++) {
			for (int i = 0; i < count.length; i++) {
				if( m == 0){
				    count[i][m] = 0;
				}else if(m == 1){
					if(i == (J - 1 + n ) % n || i == (J + 1) % n){
						count[i][m] = 1;
					}else {
						count[i][m] = 0;
					}
				}else {
					System.out.println("i:" + i + "m:" + m);
					count[i][m] = count[(i - 1 + n ) % n][m - 1] + count[(i + 1) % n][m - 1];
				}
			}
			
		}
		for (int i = 0; i < count.length; i++) {
			for (int k = 0; k < count[i].length; k++) {
				System.out.println("array[" + i +"][" + k + "]:" + count[i][k]);
			}
		}
		System.out.println(count[0][deliverCount]);
		return 0;
	}
}
